package com.zzxy.spring12.factory;

import com.zzxy.spring12.aspect.MyAspect;
import com.zzxy.spring12.service.IStudentService;
import com.zzxy.spring12.service.impl.StudentServiceImpl;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

public class MyBaanFactory {
  public  static IStudentService createStudentService(){
      StudentServiceImpl studentServiceImpl = new StudentServiceImpl();
      MyAspect myAspect = new MyAspect();
      IStudentService studentServiceProxy = (IStudentService) Proxy.newProxyInstance(MyBaanFactory.class.getClassLoader(), studentServiceImpl.getClass().getInterfaces(), new InvocationHandler() {
          @Override
          public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
              myAspect.before();
              Object obj = method.invoke(studentServiceImpl, args);
              myAspect.after();
              return obj;
          }
      });
      return studentServiceProxy;
  }
}
